🛠️ macOS 修改 SSH 默认端口 (22) 的正确姿势
2025年09月16日
在 macOS 上,我们有时需要修改 SSH 的默认端口(22),常见原因包括: 端口冲突:例如使用了 OrbStack、GitLab Runner 等工具占用了本地的 22 端口。 安全需求:为了避免被公网扫描,希望更改为非标准端口(如 2222)。
# MacOS # SSH # 端口配置

1. 问题背景
在 macOS 上,我们有时需要修改 SSH 的默认端口(22),常见原因包括:
- 端口冲突:例如使用了 OrbStack、GitLab Runner 等工具占用了本地的 22 端口。
- 安全需求:为了避免被公网扫描,希望更改为非标准端口(如 2222)。
2. ⚠️ 常见的“错误”姿势(为什么 Linux 的方法无效?)
在 Linux 上,我们通常直接修改 /etc/ssh/sshd_config 中的 Port 即可。但在 macOS 上,这种方法通常无效。
- ❌ 修改
/etc/ssh/sshd_config:- 原因:macOS 的 SSH 服务是由
launchd托管的。launchd会先监听端口,收到请求后再启动sshd进程。因此,仅修改sshd的配置文件无法改变launchd监听的入口端口。
- 原因:macOS 的 SSH 服务是由
- ❌ 修改
/System/Library/LaunchDaemons/ssh.plist:- 原因:这是系统核心文件,受 SIP (系统完整性保护) 保护。即使你使用
sudo甚至关闭 SIP,修改这个文件都非常麻烦且容易被系统更新覆盖。
- 原因:这是系统核心文件,受 SIP (系统完整性保护) 保护。即使你使用
3. ✅ 正确姿势:修改系统服务映射
在 macOS 上,最简单且持久的修改方法是直接修改系统服务列表中的 SSH 端口映射。
第一步:修改 /etc/services
我们需要修改系统对 “ssh” 服务定义的默认端口。
-
打开终端,使用
vim编辑服务配置文件:sudo vim /etc/services -
输入
/ssh并回车,搜索 SSH 相关的定义。 -
找到以下两行(通常在文件的开头部分):
ssh 22/udp # SSH Remote Login Protocol ssh 22/tcp # SSH Remote Login Protocol -
按
i进入编辑模式,将22修改为你想要的端口(例如2222):ssh 2222/udp # SSH Remote Login Protocol ssh 2222/tcp # SSH Remote Login Protocol -
按
Esc退出编辑模式,输入:wq保存并退出。
第二步:重启 SSH 服务
修改完成后,需要重启系统服务以让 launchd 重新读取配置。
请依次执行以下命令:
# 1. 停止 SSH 服务 (卸载配置)
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
# 2. 启动 SSH 服务 (重新加载配置)
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist
(注:如果不熟悉命令,重启电脑也能达到同样的效果)
4. 验证结果
修改完成后,你可以尝试通过新的端口连接本地进行测试:
# 使用 -p 指定新端口
ssh localhost -p 2222
如果能看到登录提示或成功登录,说明修改成功。
💡 补充说明:修改其他 SSH 配置
虽然修改端口不能用 sshd_config,但其他 SSH 配置(如禁止密码登录、允许 Root 登录等)依然是遵循标准方式的。
- 修改方式:直接编辑
/etc/ssh/sshd_config。 - 生效方式:修改后同样运行上面的
launchctl unload/load命令重启服务即可生效。